﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using QldtSdh.DAL.Models;
using QldtSdh.GUI.DuLieu;

namespace QldtSdh.BLL
{
    public partial class BizLopKhoaNganh
    {
        /// <summary>
        /// Lấy danh sách theo khóa và ngành học
        /// </summary>
        /// <returns></returns>
        public static List<LopKhoaNganh> GetList(string guidIdKhoaHoc, string guidIdNganh)
        {
            using (var db = CEMS4UG_DHKHContext.GetContext())
            {
                return db.LopKhoaNganhDbSet.Where(e => e.KhoaHoc_NganhDaoTao.MaKhoaHocGUID == guidIdKhoaHoc && e.KhoaHoc_NganhDaoTao.MaNganhDaoTaoGUID == guidIdNganh).OrderBy(e => e.TenLopKhoaNganh).ToList();
            }
        }

        /// <summary>
        /// Lấy danh sách theo khóa học
        /// </summary>
        /// <param name="guidIdKhoaHoc"></param>
        /// <returns></returns>
        public static List<LopKhoaNganh> GetList(string guidIdKhoaHoc, CEMS4UG_DHKHContext dbContext = null)
        {
            if (dbContext != null)
                return dbContext.LopKhoaNganhDbSet.Where(e => e.KhoaHoc_NganhDaoTao.MaKhoaHocGUID == guidIdKhoaHoc).OrderBy(e => e.TenLopKhoaNganh).ToList();
            using (var db = CEMS4UG_DHKHContext.GetContext())
            {
                return db.LopKhoaNganhDbSet.Where(e => e.KhoaHoc_NganhDaoTao.MaKhoaHocGUID == guidIdKhoaHoc).OrderBy(e => e.TenLopKhoaNganh).ToList();
            }
        }

        public static List<LopKhoaNganh> GetListByMaDaoTaoKhoaNganh(string maDaoTaoKhoaNganhGUID, string maCoSoDaoTaoGUID, CEMS4UG_DHKHContext db = null)
        {
            if (db == null)
                using (var db2 = CEMS4UG_DHKHContext.GetContext())
                    return GetListByMaDaoTaoKhoaNganh(maDaoTaoKhoaNganhGUID, maCoSoDaoTaoGUID, db2);
            else
                return db.LopKhoaNganhDbSet
                    .Include("KhoaHoc_NganhDaoTao")
                    //.Include("NganhDaoTao")
                    .Where(e => e.MaDaoTaoKhoaNganhGUID == maDaoTaoKhoaNganhGUID && e.MaCoSoDaoTaoGUID == maCoSoDaoTaoGUID)
                    //.OrderBy(e => e.KhoaHoc_NganhDaoTao.NganhDaoTao.TenNganhDaoTao)
                    //.ThenBy(e => e.TenLopKhoaNganh)
                    .OrderBy(e => e.TenLopKhoaNganh)
                    .ToList();
        }

        public static LopKhoaNganh GetByID(string guidIdLop)
        {
            using (var db = CEMS4UG_DHKHContext.GetContext())
            {
                return db.LopKhoaNganhDbSet.Where(e => e.MaLopKhoaNganhGUID == guidIdLop).FirstOrDefault();
            }
        }

        public static bool IsExistByID(string guidIdLop)
        {
            using (var db = CEMS4UG_DHKHContext.GetContext())
            {
                return db.LopKhoaNganhDbSet.Where(e => e.MaLopKhoaNganhGUID == guidIdLop).FirstOrDefault() == null ? false : true;
            }
        }

        public static CODE_RESULT_RETURN Add(LopKhoaNganh obj)
        {
            using (var db = CEMS4UG_DHKHContext.GetContext())
            {
                var _hp = db.LopKhoaNganhDbSet.Where(e => e.TenLopKhoaNganh == obj.TenLopKhoaNganh
                                                    ).FirstOrDefault();
                if (_hp != null)
                    return CODE_RESULT_RETURN.TenTrung;
                obj.MaLopKhoaNganhGUID = Guid.NewGuid().ToString();
                db.LopKhoaNganhDbSet.Add(obj);
                db.SaveChanges();
                NhatKyHoatDong nhatKy = new NhatKyHoatDong();
                BizNhatKyHoatDong.InitData<LopKhoaNganh>(nhatKy, null, obj.MaLopKhoaNganhGUID, LOAIDOITUONG.LỚP_KHÓA_NGÀNH, LOAITHAOTAC.Thêm);
                BizNhatKyHoatDong.Add<LopKhoaNganh>(nhatKy, obj);
                return CODE_RESULT_RETURN.ThanhCong;
            }
        }

        public static CODE_RESULT_RETURN Update(LopKhoaNganh obj)
        {
            using (var db = CEMS4UG_DHKHContext.GetContext())
            {
                var _hp = db.LopKhoaNganhDbSet.Where(e =>
                                                    e.TenLopKhoaNganh == obj.TenLopKhoaNganh &&
                                                    e.MaLopKhoaNganhGUID != obj.MaLopKhoaNganhGUID
                                                    ).FirstOrDefault();
                if (_hp != null)
                    return CODE_RESULT_RETURN.TenTrung;
                _hp = db.LopKhoaNganhDbSet.Where(e => e.MaLopKhoaNganhGUID == obj.MaLopKhoaNganhGUID).FirstOrDefault();
                if (_hp == null)
                    return CODE_RESULT_RETURN.ThatBai;
                NhatKyHoatDong nhatKy = new NhatKyHoatDong();
                BizNhatKyHoatDong.InitData<LopKhoaNganh>(nhatKy, _hp, _hp.MaLopKhoaNganhGUID, LOAIDOITUONG.LỚP_KHÓA_NGÀNH, LOAITHAOTAC.Chỉnh_sửa);

                _hp.TenLopKhoaNganh = obj.TenLopKhoaNganh;
                _hp.MaDaoTaoKhoaNganhGUID = obj.MaDaoTaoKhoaNganhGUID;
                _hp.MaCoSoDaoTaoGUID = obj.MaCoSoDaoTaoGUID;
                db.SaveChanges();
                BizNhatKyHoatDong.Add<LopKhoaNganh>(nhatKy, _hp);
                return CODE_RESULT_RETURN.ThanhCong;
            }
        }

        public static CODE_RESULT_RETURN Delete(string guidIdLopKhoaNganh)
        {
            using (var db = CEMS4UG_DHKHContext.GetContext())
            {
                var _hp = db.LopKhoaNganhDbSet.Where(e => e.MaLopKhoaNganhGUID == guidIdLopKhoaNganh).FirstOrDefault();
                if (_hp == null)
                    return CODE_RESULT_RETURN.ThatBai;
                if (_hp.ListHocVien != null && _hp.ListHocVien.Count > 0)
                    return CODE_RESULT_RETURN.ThatBai;
                db.LopKhoaNganhDbSet.Remove(_hp);
                db.SaveChanges();
                NhatKyHoatDong nhatKy = new NhatKyHoatDong();
                BizNhatKyHoatDong.InitData<LopKhoaNganh>(nhatKy, _hp, _hp.MaLopKhoaNganhGUID, LOAIDOITUONG.LỚP_KHÓA_NGÀNH, LOAITHAOTAC.Xóa);
                BizNhatKyHoatDong.Add<LopKhoaNganh>(nhatKy, null);
                return CODE_RESULT_RETURN.ThanhCong;
            }
        }
    }
}
